package com.aaa.sbm.service.impl;

import com.aaa.sbm.entity.Role;
import com.aaa.sbm.dao.RoleDao;
import com.aaa.sbm.service.RoleService;
import org.springframework.stereotype.Service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.aaa.sbm.util.CustomException;
import com.aaa.sbm.util.ResultStatus;
import com.aaa.sbm.util.Page;


import javax.annotation.Resource;
import java.util.List;

/**
 * 角色信息表(Role)表服务实现类
 *
 * @author makejava
 * @since 2024-04-09 11:21:17
 */
@Service("roleService")
public class RoleServiceImpl implements RoleService {
    @Resource
    private RoleDao roleDao;

    @Override
    public List<Role> queryListByUserId(Integer userId) {
        return roleDao.queryListByUserId(userId);
    }

    /**
     * 通过ID查询单条数据
     *
     * @param roleId 主键
     * @return 实例对象
     */
    @Override
    public Role queryById(Integer roleId) {
        return this.roleDao.queryById(roleId);
    }


    /**
     * 根据分页参数查询角色信息。
     *
     * @param page 分页对象，包含页码和每页大小以及查询的数据对象。
     * @return 返回分页后的角色信息。
     * @throws CustomException 如果分页参数不合法（如页码或每页大小为0），则抛出自定义异常。
     */
    @Override
    public PageInfo queryByPage(Page<Role> page) {
        // 检查分页参数是否有效，防止传入空或者无效的分页信息
        if (page == null || page.getPageNo() == null || page.getPageNo() == 0 || page.getPageSize() == null || page.getPageSize() == 0) {
            throw new CustomException(ResultStatus.PARAM_NOT_EMPTY.getReturnCode(),
                    ResultStatus.PARAM_NOT_EMPTY.getReturnMessage());
        }

        // 初始化分页插件，设置当前页码和每页大小
        PageHelper.startPage(page.getPageNo(), page.getPageSize());

        // 从page对象中获取Role对象，用于查询条件
        Role role = page.getData();

        // 执行查询，返回分页后的角色信息
        return new PageInfo(roleDao.queryAllByLimit(role));
    }

    /**
     * 新增数据
     *
     * @param role 实例对象
     * @return 实例对象
     */
    @Override
    public Role insert(Role role) {
        this.roleDao.insert(role);
        return role;
    }

    /**
     * 修改数据
     *
     * @param role 实例对象
     * @return 实例对象
     */
    @Override
    public Role update(Role role) {
        this.roleDao.update(role);
        return this.queryById(role.getRoleId());
    }

    /**
     * 通过主键删除数据
     *
     * @param roleId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer roleId) {
        return this.roleDao.deleteById(roleId) > 0;
    }
}
